"use strict";

import axios from "axios";
import Vue from "vue";

// Full config:  https://github.com/axios/axios#request-config



let config = {

  // 下面两个属性，用来设置，请求失败或者超时，自动重新请求的次数和间隙时间
  retry: 1000, // 请求次数
  retryInterval: 10*1000// 求期间隙
};

const _axios = axios.create(config);


// 配置请求的跟路径
// _axios.defaults.baseURL = 'http://iddd.oss-cn-shanghai.aliyuncs.com/'
// _axios.defaults.baseURL = '/'
_axios.defaults.baseURL = 'http://localhost:8080/'

Vue.prototype.$http = _axios

_axios.interceptors.request.use(
  function(config) {
    // Do something before request is sent
    return config;
  },
  function(error) {
    // Do something with request error
    return Promise.reject(error);
  }
);

//请求后返回数据拦截
_axios.interceptors.response.use(res => {
    return res
  },
  function axiosRetryInterceptor(res) {
    var config = res.config;
    //如果配置不存在或重试属性未设置，抛出promise错误
    if (!config || !config.retry) return Promise.reject(res);
    //设置一个变量记录重新请求的次数
    config.retryCount = config.retryCount || 0;
    // 检查重新请求的次数是否超过我们设定的请求次数
    if (config.retryCount >= config.retry) {
      return Promise.reject(res);
    }
    //重新请求的次数自增
    config.retryCount += 1;
    // 创建新的Promise来处理重新请求的间隙
    var back = new Promise(function(resolve) {
      console.log("接口"+config.url+"请求超时，重新请求")
      setTimeout(function() {
        resolve();
      }, config.retryInterval|| 1);
    });
    //返回axios的实体，重试请求
    return back.then(function() {
      return _axios(config);
    });
  }
);


export default _axios;
